﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using CI.Caja.BL;
using CI.Caja.BE;

namespace CI.Caja.MVC.Controllers
{
    public class PersonalController : Controller
    {
        //
        // GET: /Personal/
        //Dependencias
        public IBL_Personal PersonalService { get; set; }
        public IBL_Cargo CargoService { get; set; }


        public ActionResult Index()
        {
            ICollection<BE_Personal> modelo = PersonalService.ListarPersonal();
            TempData["cargos"] = ListarCargos();
            return View(modelo);
        }

        //
        // GET: /Personal/Details/5

        public ActionResult Details(string id)
        {
            BE_Personal modelo = PersonalService.ObtenerPersonal(id);

            return View(modelo);
        }

        //
        // GET: /Personal/Create

        public ActionResult Create()
        {
            TempData["cargos"] = ListarCargos();
            return View();
        } 

        //
        // POST: /Personal/Create

        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    string idpersonal = PersonalService.ObtenerCodigo();
                    string nombre = (string)collection["Nombre"];
                    string apellido = (string)collection["Apellido"];
                    string numDNI = (string)collection["NumDNI"];

                    if (collection["CodigoCargo"] == null || collection["CodigoCargo"] == string.Empty)
                        throw new Exception("Seleccione un Cargo");

                    int idCargo = int.Parse(collection["CodigoCargo"]);

                    if (PersonalService.ValidaDuplicado(numDNI) != 0)
                    {
                        throw new Exception("No puede ingresar el perosnal. Existe otro personal con mismo número DNI");
                    }

                    PersonalService.RegistrarPersonal(idpersonal, nombre, apellido, idCargo, numDNI);
                    return RedirectToAction("Index");
                }
                else
                {
                    return View();
                }
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(String.Empty, ex.Message);
                TempData["cargos"] = ListarCargos();
                return View();
            }
        }
        
        //
        // GET: /Personal/Edit/5
 
        public ActionResult Edit(string id)
        {
            
            BE_Personal modelo = PersonalService.ObtenerPersonal(id);
            TempData["cargos"] = ListarCargos(modelo.IdCargo);
            
            return View(modelo);
        }

        //
        // POST: /Personal/Edit/5

        [HttpPost]
        public ActionResult Edit(string id, FormCollection collection)
        {
            try
            {
                string nombre = (string)collection["Nombre"];
                string apellido = (string)collection["Apellido"];
                string numDNI = (string)collection["NumDNI"];
               // int idCargo = int.Parse(collection["IdCargo"]);
                if (collection["CodigoCargo"] == null || collection["CodigoCargo"] == string.Empty)
                    throw new Exception("Seleccione un Cargo");

                int idCargo = int.Parse(collection["CodigoCargo"]);

                PersonalService.ActualizarPersonal(id, nombre, apellido, idCargo, numDNI);
                return RedirectToAction("Index");
                

            }
            catch (Exception ex)
            {
                ModelState.AddModelError(String.Empty, ex.Message);
                TempData["cargos"] = ListarCargos();
                BE_Personal modelo = PersonalService.ObtenerPersonal(id);
                return View(modelo);
            }
        }

       
       private ICollection<SelectListItem> ListarCargos()
        {
            ICollection<SelectListItem> Cargos = new List<SelectListItem>();
            Cargos.Add(new SelectListItem() { Value = string.Empty, Text = "Seleccione..." });
            foreach (BE_Cargo cargo in CargoService.ListarCargos())
                Cargos.Add(new SelectListItem() { Value = cargo.IdCargo.ToString(), Text = cargo.Descripcion });
            return Cargos;

        }

       private ICollection<SelectListItem> ListarCargos(int idcargo)
       {
           ICollection<SelectListItem> Cargos = new List<SelectListItem>();
           Cargos.Add(new SelectListItem() { Value = string.Empty, Text = "Seleccione..." });
           foreach (BE_Cargo cargo in CargoService.ListarCargos())
               if (cargo.IdCargo == idcargo)
               {
                   Cargos.Add(new SelectListItem() { Value = cargo.IdCargo.ToString(), Text = cargo.Descripcion, Selected = true });
               }
               else
               {
                   
                   Cargos.Add(new SelectListItem() { Value = cargo.IdCargo.ToString(), Text = cargo.Descripcion });
               }
                   return Cargos;

       }
    }
}
